const mysql = require("mysql2");
const clientConfig = require("./mysql.js");
const logger = require("../utils/logger");

// 创建数据库连接池
const pool = mysql.createPool({
  host: clientConfig.host, // 数据库主机名
  user: clientConfig.user, // 数据库用户名
  port: clientConfig.port, // 数据库端口号
  password: clientConfig.password, // 数据库密码
  database: clientConfig.database, // 数据库名
  waitForConnections: clientConfig.waitForConnections, // 等待连接的最大数量
  connectionLimit: clientConfig.connectionLimit, // 连接池最大连接数量
  queueLimit: clientConfig.queueLimit // 队列最大数量
});

// 测试连接
function testConnection() {
  pool.getConnection((err, connection) => {
    if (err) {
      logger.error("数据库连接失败", err);
      return;
    }
    logger.info("数据库连接成功");

    connection.release();
  });
}

// 获取数据库连接的函数
function dbConnect() {
  return new Promise((resolve, reject) => {
    pool.getConnection((err, connection) => {
      !err ? resolve(connection) : reject(err);
    });
  });
}

// 需要传入sql语句和参数
function dbQuery(sql, params) {
  return new Promise(async (resolve, reject) => {
    const connection = await dbConnect();
    connection.query(sql, params, (err, results, fields) => {
      if (err) {
        logger.error("数据库查询失败", err);
        reject(err);
        return;
      }
      resolve(results);
      connection.release();
    });
  });
}

// 导出 connect 和 query 函数
module.exports = { dbConnect, dbQuery, testConnection };
